/*************************************************************
 * Title: StatusType.java
 * Author: Huang Shaobin
 * Email: Shaobin.Software@gmail.com Shaobin_Software@163.com 
 * Date: Jan 31, 2013 4:54:19 AM
 * Description: 
 * Copyright (c) 2012
 ************************************************************/
package snow.core.enums.type;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import org.hibernate.HibernateException;
import org.hibernate.engine.spi.SessionImplementor;

import snow.core.enums.Status;

/**
 * 序列化的类型
 */
public class StatusType extends EnumUserType {

	/** 从JDBC的ResultSet读取属性值。这个方法是在从数据库查询数据时用到。 */
	public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException {
		Object result = rs.getObject(names[0]);
		if (result instanceof Integer) {
			return Status.toStatusFrom(((Integer) result).intValue());
		}
		return null;
	}

	/** 将属性的值设置到PreparedStatement。 */
	public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException {
		if (value instanceof Status) {
			st.setInt(index, ((Status) value).getValue());
		}
	}

	/** 告诉Hibernate这个UserType用来映射的数据类型。这里是Status类 */
	public Class<?> returnedClass() {
		return Status.class;
	}

	/** 告诉Hibernate要使用什么SQL列类型生成DDL */
	public int[] sqlTypes() {
		return new int[] { Types.INTEGER };
	}

}
